<?php

namespace common\components\fenzhangtong;

use common\Tools;
use GuzzleHttp\Client;
use wodrow\yii2wtools\tools\ArrayHelper;
use yii\base\Component;

class FenZhangTong extends Component
{
    public $baseUri;
    public $sdjKey;
    public $xiaMengGuoJiYinHangCer;
    public $version = 1;
    public $platNo; // 平台编号
    public $mchNo; // 平台客户编号
    public $wxEntID;

    public $transId; // 请求序列号
    public $platCustNo; // 平台客户号
    public $technologyMessage; // 技术报文
    public $preEncryptionData; // 加密前请求数据
    public $randKey; // 随机密钥
    public $serialNo; // 技术报文序列号
    public $route; // 请求路径
    public $resp_arr; // 响应数据
    public $ret_code;
    public $ret_msg;

    public function init()
    {
        parent::init();
        if (substr($this->sdjKey, 0, 1) == '@') {
            $this->sdjKey = file_get_contents(\Yii::getAlias($this->sdjKey));
        }else{
            if (substr($this->sdjKey, 0, 5) != '-----'){
                $this->sdjKey = "-----BEGIN RSA PRIVATE KEY-----\n" .
                    wordwrap($this->sdjKey, 64, "\n", true) .
                    "\n-----END RSA PRIVATE KEY-----";
            }
        }
        if (substr($this->xiaMengGuoJiYinHangCer, 0, 1) == '@') {
            $this->xiaMengGuoJiYinHangCer = file_get_contents(\Yii::getAlias($this->xiaMengGuoJiYinHangCer));
        }else{
            if (substr($this->xiaMengGuoJiYinHangCer, 0, 5) != '-----'){
                $this->xiaMengGuoJiYinHangCer = "-----BEGIN PUBLIC KEY-----\n" .
                    wordwrap($this->xiaMengGuoJiYinHangCer, 64, "\n", true) .
                    "\n-----END PUBLIC KEY-----";
            }
        }
    }

    /**
     * 4.1.1	个人客户注册申请
     */
    public function IESI111001($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'custName' => $data['custName'], // 姓名
            'idType' => $data['idType'], // 证件类型：（A-身份证 E-港澳居民往来大陆通行证 F-台湾居民往来大陆通行证）
            'idNo' => $data['idNo'], // 证件号码
            'mobileNo' => $data['mobileNo'], // 预留手机号码
            'openBank' => $data['openBank'], // 开户银行，行号(支持的银行列表参考5.2,对应行号在bankCode.csv里提供)
            'cardNo' => $data['cardNo'], // 卡号
            'notifyUrl' => $data['notifyUrl'], // 通知回调地址
            'returnUrl' => $data['returnUrl'], // 交易完成后页面跳转地址
        ];
        $params['gender'] = $data['gender'] ?? null; // 性别  M-男  F-女
        $params['birthDay'] = $data['birthDay'] ?? null; // 出生日期  YYYYMMDD
        $params['email'] = $data['email'] ?? null; // 电子邮箱地址
        $params['legalExpireDate'] = $data['legalExpireDate'] ?? null; // 证件有效期(身份证)
        $params['legalAuthDate'] = $data['legalAuthDate'] ?? null; // 证件起始日期
        $params['occupation'] = $data['occupation'] ?? null; // 职业（0001: 国家机关、党群组织、企业、事业单位负责人,0002: 专业技术人员,0003: 办事人员和有关人员,0004: 商业工作人员,0005: 服务性工作人员,0006: 农、林、牧、渔、水利业生产人员,0007: 生产、运输设备操作人员及有关人员,0008: 军人,0009: 不便分类的其他从业人员）
        $params['address'] = $data['address'] ?? null; // 联系地址
        $params['legalAddress'] = $data['legalAddress'] ?? null; // 证件地址
        $params['issueOffice'] = $data['issueOffice'] ?? null; // 发证机关：XXX公安局
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.1.2企业客户注册申请
     */
    public function IESI111003($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'custName' => $data['custName'], // 公司名称
            'idType' => $data['idType'], // 企业证件类型  I - 营业执照T-其他主体资格证明文件
            'idNo' => $data['idNo'], // 企业证件号码
            'acctNo' => $data['acctNo'], // 企业对公账号
            'openBank' => $data['openBank'], // 开户银行，行号(支持的银行列表参考5.2,对应行号在bankCode.csv里提供)
            'mobileNo' => $data['mobileNo'], // 企业预留经办人手机号码
            'notifyUrl' => $data['notifyUrl'], // 通知回调地址
            'returnUrl' => $data['returnUrl'], // 交易完成后页面跳转地址
        ];
        $params['orgLicense'] = $data['orgLicense'] ?? null; // 组织机构代码
        $params['legalName'] = $data['legalName'] ?? null; // 法人姓名
        $params['legalGender'] = $data['legalGender'] ?? null; // 法人性别  M-男  F-女
        $params['legalIdType'] = $data['legalIdType'] ?? null; // 法人证件类型 A-身份证
        $params['legalIdNo'] = $data['legalIdNo'] ?? null; // 法人证件号码
        $params['birthDay'] = $data['birthDay'] ?? null; // 出生日期  YYYYMMDD
        $params['email'] = $data['email'] ?? null; // 企业电子邮箱
        $params['expireDate'] = $data['expireDate'] ?? null; // 证件有效期
        $params['address'] = $data['address'] ?? null; // 地址/单位地址
        $params['legalExpireDate'] = $data['legalExpireDate'] ?? null; // 法人身份证有效期 YYYYMMDD
        $params['industry'] = $data['industry'] ?? null; // 经营范围：A: 农、林、牧、渔业,B: 采矿业,C: 制造业,D: 电力、热力、燃气及水生产和供应业,E: 建筑业,F: 批发和零售业,G: 交通运输、仓储和邮政业,H: 住宿和餐饮业,I: 信息传输、软件和信息技术服务业,J: 金融业,K: 房地产业,L: 租赁和商务服务业,M: 科学研究和技术服务业,N: 水利、环境和公共设施管理业,O: 居民服务、修理和其他服务业,P: 教育,Q: 卫生和社会工作,R: 文化、体育和娱乐业,S: 公共管理、社会保障和社会组织,T: 国际组织
        $params['owner'] = $data['owner'] ?? null; // 股东/控制人
        $params['benefitName'] = $data['benefitName'] ?? null; // 受益人姓名
        $params['benefitIdNo'] = $data['benefitIdNo'] ?? null; // 受益人证件号
        $params['benefitIdType'] = $data['benefitIdType'] ?? null; // 受益人证件类型：A-身份证  E-港澳居民往来大陆通行证F-台湾居民往来大陆通行证
        $params['benefitExpireDate'] = $data['benefitExpireDate'] ?? null; // 受益人证件有效期 YYYYMMDD
        $params['benefitAddress'] = $data['benefitAddress'] ?? null; // 受益人地址
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.1.3会员新增绑卡申请
     */
    public function IESI111101($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'platCustNo' => $data['platCustNo'], // 客户编号
            'mobileNo' => $data['mobileNo'], // 预留手机号码
            'openBank' => $data['openBank'], // 开户银行，行号(支持的银行列表参考5.2,对应行号在bankCode.csv里提供)
            'cardNo' => $data['cardNo'], // 卡号
            'payCode' => "051", // 支付通道 （051-易宝支付）
        ];
        $params['notifyUrl'] = $data['notifyUrl'] ?? null; // 跳转地址（注：该字段仅在企业绑卡时上送）
        $params['returnUrl'] = $data['returnUrl'] ?? null; // 企业新增绑卡审核结果通知地址
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.1.4会员新增绑卡验证
     */
    public function IESI111102($data)
    {
        $params = [
            'platNo' => $this->platNo, //商户平台在分账通注册的平台编号
            'transId' => $data['transId'], //请求业务流水号
            'platCustNo' => $data['platCustNo'], // 客户编号
            'oriTransId' => $data['oriTransId'], // 新增绑卡申请时的对应请求业务流水号
            'phoneDynCode' => $data['phoneDynCode'], // 会员收到的短信验证码
        ];
        $params['transAmt'] = $data['transAmt'] ?? null; // 转账金额（企业绑卡必传）
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.1.5结算账户修改申请
     */
    public function IESI111103($data)
    {
        $params = [
            'platNo' => $this->platNo, //商户平台在分账通注册的平台编号
            'transId' => $data['transId'], //请求业务流水号
            'platCustNo' => $data['platCustNo'], // 客户编号
            'cardNo' => $data['cardNo'], // 卡号(账号)。需要更换为结算账户的卡号(账号)。
            'notifyUrl' => $data['notifyUrl'], // 通知回调地址
            'returnUrl' => $data['returnUrl'], // 交易完成后页面跳转地址
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.1.6修改手机号码申请
     */
    public function IESI111104($data)
    {
        $params = [
            'platNo' => $this->platNo, //商户平台在分账通注册的平台编号
            'transId' => $data['transId'], //请求业务流水号
            'platCustNo' => $data['platCustNo'], // 客户编号
            'notifyUrl' => $data['notifyUrl'], // 通知回调地址
            'returnUrl' => $data['returnUrl'], // 交易完成后页面跳转地址
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.1.7交易密码设置申请
     */
    public function IESI111006($data)
    {
        $params = [
            'platNo' => $this->platNo, //商户平台在分账通注册的平台编号
            'transId' => $data['transId'], //请求业务流水号
            'platCustNo' => $data['platCustNo'], // 客户编号
            'bizType' => $data['bizType'], // 业务类型: 1-修改密码 2-重置密码 3-首次设置密码
            'notifyUrl' => $data['notifyUrl'], // 通知回调地址
            'returnUrl' => $data['returnUrl'], // 交易完成后页面跳转地址
        ];
        $params['transAmt'] = $data['transAmt'] ?? null; // 转账金额（企业绑卡必传）
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.1.8短信验证码申请
     */
    public function IESI111060($data)
    {
        $params = [
            'platNo' => $this->platNo, //商户平台在分账通注册的平台编号
            'transId' => $data['transId'], //请求业务流水号
            'bizType' => $data['bizType'], // 业务类型（OPEN_ACCT -开户鉴权 WITHDRAW-电子账户提现 BindNewCard-企业新增绑卡）
            'mobileNo' => $data['mobileNo'], // 手机号码
        ];
        $params['oriTransId'] = $data['oriTransId'] ?? null; // 原业务流水号（开户鉴权必填）
        $params['idNo'] = $data['idNo'] ?? null; // 证件号
        $params['cardNo'] = $data['cardNo'] ?? null; // 卡号
        $params['custName'] = $data['custName'] ?? null; // 客户姓名
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.1.9个人开户提交验证
     */
    public function IESI111061($data)
    {
        $params = [
            'platNo' => $this->platNo, //商户平台在分账通注册的平台编号
            'transId' => $data['transId'], //请求业务流水号
            'oriTransId' => $data['oriTransId'], // 原业务流水号(个人开户申请时的业务流水号)
            'phoneDynCode' => $data['phoneDynCode'], // 短信验证码
        ];
        $params['transAmt'] = $data['transAmt'] ?? null; // 转账金额(港澳开户必填)，预留
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.1.10电子账户余额查询
     */
    public function IESI111062($data)
    {
        $params = [
            'platNo' => $this->platNo, //商户平台在分账通注册的平台编号
            'transId' => $data['transId'], //请求业务流水号
            'eAcctNo' => $data['eAcctNo'], // 电子账户
            'platCustNo' => $data['platCustNo'], // 平台客户编号
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.1.11电子账户提现申请
     */
    public function IESI111063($data)
    {
        $params = [
            'platNo' => $this->platNo, //商户平台在分账通注册的平台编号
            'transId' => $data['transId'], //请求业务流水号
            'platCustNo' => $data['platCustNo'], // 客户编号
            'eAcctNo' => $data['eAcctNo'], // 电子账户
            'orderAmt' => $data['orderAmt'], // 提现金额
            'phoneDynCode' => $data['phoneDynCode'], // 短信验证码
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.1.12电子账户提现结果查询
     */
    public function IESI111064($data)
    {
        $params = [
            'platNo' => $this->platNo, //商户平台在分账通注册的平台编号
            'transId' => $data['transId'], //请求业务流水号
            'oriTransId' => $data['oriTransId'], // 原业务流水号(账户原业务流水号)
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.1.13会员申请开通线下转入
     */
    public function IESI111069($data)
    {
        $params = [
            'platNo' => $this->platNo, //商户平台在分账通注册的平台编号
            'transId' => $data['transId'], //请求业务流水号
            'platCustNo' => $data['platCustNo'], // 客户编号
            'applyType' => $data['applyType'], // 申请类型；1-申请开通；2-复核；3-拒绝
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.1.14会员信息补录申请
     */
    public function IESI111044($data)
    {
        $params = [
            'platNo' => $this->platNo, //商户平台在分账通注册的平台编号
            'transId' => $data['transId'], //请求业务流水号
            'platCustNo' => $data['platCustNo'], // 客户编号
        ];
        $params['returnUrl'] = $data['returnUrl'] ?? null; // 返回地址
        $params['expireDate'] = $data['expireDate'] ?? null; // 对个人和企业。证件到期日期:yyyy-MM-dd
        $params['nationality'] = $data['nationality'] ?? null; // 仅个人。地区：CHN：中华人民共和国HKG：中国香港MAC：中国澳门TWN：中国台湾仅个人。职业：1000 党的机关、国家机关、群众团体和社会组织、企事业单位负责人2000 专业技术人员3000 办事人员和有关人员4000 商业工作人员5000 服务工作人员6000 农林牧渔劳动者7000 生产工作者，运输工作和部分体力劳动者8000 军人9000 不便分类的其他劳动者
        $params['address'] = $data['address'] ?? null; // 地址/单位地址。对个人和企业。
        $params['legalExpireDate'] = $data['legalExpireDate'] ?? null; // 法人身份证到期日期。仅企业。格式：yyyy-MM-dd
        $params['industry'] = $data['industry'] ?? null; // 经营范围,仅企业。代码表：经营范围：A: 农、林、牧、渔业,B: 采矿业,C: 制造业,D: 电力、热力、燃气及水生产和供应业,E: 建筑业,F: 批发和零售业,G: 交通运输、仓储和邮政业,H: 住宿和餐饮业,I: 信息传输、软件和信息技术服务业,J: 金融业,K: 房地产业,L: 租赁和商务服务业,M: 科学研究和技术服务业,N: 水利、环境和公共设施管理业,O: 居民服务、修理和其他服务业,P: 教育,Q: 卫生和社会工作,R: 文化、体育和娱乐业,S: 公共管理、社会保障和社会组织,T: 国际组织
        $params['owner'] = $data['owner'] ?? null; // 股东/控制人。仅企业。
        $params['benefitName'] = $data['benefitName'] ?? null; // 受益人姓名。仅企业。
        $params['benefitIdNo'] = $data['benefitIdNo'] ?? null; // 受益人证件号。仅企业。
        $params['benefitIdType'] = $data['benefitIdType'] ?? null; // 受益人证件类型。仅企业。代码表：A-身份证E-港澳居民往来大陆通行证F-台湾居民往来大陆通行证
        $params['benefitExpireDate'] = $data['benefitExpireDate'] ?? null; // 受益人证件到期日期。仅企业。格式：yyyy-MM-dd
        $params['benefitAddress'] = $data['benefitAddress'] ?? null; // 受益人地址
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.2.1创建交易订单
     * orderList.platOrderNo	M	C(32)	交易订单号
     * orderList.platOrderInfo	M	C(128)	订单内容
     * orderList.transAmt	M	N(19,2)	订单金额
     * orderList.guaranteeType	M	C(1)	担保类型 默认1-担保交易， 支付完成只做冻结 2-非担保交易，支付完成后直接打款给卖方
     * orderList.sellerId	M	C(32)	卖方客户编号
     * orderList.buyerId	O	C(32)	买方客户编号 若buyerId传空，则支付订单的platCustNo也传空， buyerId不传空，则支付订单的platCustNo也不能为空，并与buyerId保持一致
     * orderList.sellerFee	O	N(19,2)	卖方手续费，默认为0。暂不支持交易订单中收手续费，需要分账实现。
     * orderList.buyerFee	O	N(19,2)	买方手续费，默认为0。 暂不支持交易订单中收取手续费，需要分账实现。
     * orderList.platSubsidy	O	N(19,2)	平台优惠金额，平台补贴给卖家的费用，从营销账户中扣收
     */
    public function IESI111007($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'orderNum' => $data['orderNum'], // 订单笔数
            'orderList' => $data['orderList'], // 订单信息列表
        ];
        $params['platCustNo'] = $data['platCustNo']??null; // 客户编号。为空时，查询平台分户；不为空时，查询会员分户
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.2.2创建支付订单
     */
    public function IESI111008($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'platPayId' => $data['platPayId'], // 平台支付订单号；对于同一笔支付重复提交上送同一个平台支付号
            'orderType' => $data['orderType'], // 支付订单类型1-预付货款充值订单2-支付订单3-线下转入充值客户编号为空时，不能选择1-预付货款充值订单
            'transAmt' => $data['transAmt'], // 支付金额（客户实际需要支付的金额，等于所有交易订单的交易金额+买方手续费）
            'notifyUrl' => $data['notifyUrl'], // 异步通知URL，支付完成后，分账通通知平台支付结果
            'returnUrl' => $data['returnUrl'], // 返回页面URL，支付完成后，从支付页面跳转回商户页面
        ];
        $params['platCustNo'] = $data['platCustNo'] ?? null; // 客户编号: 若客户编号不为空，则客户编号需与交易订单的买方ID一致
        $params['platOrderNos'] = $data['platOrderNos'] ?? null; // 交易订单号， 多个订单号以分号;分隔支付订单类型为2-支付订单时，此字段必传
        $params['payUserId'] = $data['payUserId'] ?? null; // 用户唯一标识
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.2.3微信支付申请
     */
    public function IESI111030($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号\
            'platPayId' => $data['platPayId'], // 平台支付订单号(创建支付订单时对应的platPayId)
            'payType' => $data['payType'], // 微信支付类型10-微信H5支付（MWEB）11-微信APP支付（APP）12-微信公众号支付（JSAPI）13-微信扫码支付（NATIVE）
            'custClientIp' => $data['custClientIp'], // 客户端IP地址
            'wxEntId' => $data['wxEntId'], // 平台微信标识。平台与分账通协定的微信主体标识字段。
        ];
        $params['platCustNo'] = $data['platCustNo'] ?? null; // 客户编号。为空时，查询平台分户；不为空时，查询会员分户
        $params['openId'] = $data['openId'] ?? null; // 用户标识，payType为公众号支付时必送字段
        $params['mpAppId'] = $data['mpAppId'] ?? null; // payType为公众号支付时送公众号appid；payType为App支付时送AppId。
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.2.4打开收银台申请
     */
    public function IESI111110($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'platPayId' => $data['platPayId'], // 平台支付订单号(创建支付订单时对应的platPayId)
            'payMethod' => $data['payMethod'], // 支付方式1-预付货款支付2-快捷支付9-线下转入
        ];
        $params['platCustNo'] = $data['platCustNo'] ?? null; // 客户编号。为空时，查询平台分户；不为空时，查询会员分户
        $params['payCardNo'] = $data['payCardNo'] ?? null; // 支付卡号，如上送卡号必须是客户的绑定卡
        $params['pageType'] = $data['pageType'] ?? null; // 0-PC端页面1-移动端页面不传默认为1-移动端
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.2.5交易订单分账申请
     * orderList.platOrderNo	M	C(32)	分账后的平台订单号
     * orderList.sellerId	M	C(32)	待分账卖方客户编号
     * orderList.transAmt	M	N(19,2)	分账金额（不超过原订单待分账金额）
     * orderList.platOrderInfo	M	C(255)	平台订单信息
     * orderList.guaranteeType	M	C(1)	担保类型，分账订单担保类型必须是2-非担保
     */
    public function IESI111105($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'oriPlatOrderNo' => $data['oriPlatOrderNo'], // 原交易订单号。创建交易订单时的交易订单号platOrderNo。
            'orderNum' => $data['orderNum'], // 订单列表包含的数量
            'orderList' => $data['orderList'], // 订单列表
        ];
        $params['platCustNo'] = $data['platCustNo'] ?? null; // 客户编号。为空时，查询平台分户；不为空时，查询会员分户
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.2.6交易订单分账审核
     * splitTradeOrderList.platOrderNo	M	C(1024)	平台交易订单号列表
     * splitTradeOrderList.currentSplitState	M	C(1)	当前分账状态。订单的分账状态为：1、待审核 ，2、一审通过，3、一审失败，4、二审通过，5、二审失败当前分账状态只能是：1、待审核，2、一审通过，这两种。
     * splitTradeOrderList.newSplitState	M	C(1)	新的分账状态。当curSplitState为1时，该值为2或者3；当curSplitState为2时，该值为4或者5.
     */
    public function IESI111112($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'splitTradeOrderList' => $data['splitTradeOrderList'], // 子注意：目前版本只支持单条订单审核，多条订单审核会拒绝该请求。分账订单列表
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.2.7预付货款退款申请
     */
    public function IESI111106($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'platCustNo' => $data['platCustNo'], // 客户编号
            'refundAmt' => $data['refundAmt'], // 退款金额
            'feeRate' => $data['feeRate'], // 费率。
            'notifyUrl' => $data['notifyUrl'], // 平台回调Url
        ];
        $params['fee'] = $data['fee'] ?? null; // 固定费用值或最大费用值。
        $params['feeType'] = $data['feeType'] ?? null; // 费用类型,不传默认为2：1-固定金额收取2-按比率收取(无封顶)3-按比率收取(有封顶)
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.2.8原路退款申请
     */
    public function IESI111039($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'platOrderNo' => $data['platOrderNo'], // 平台订单号（要退款的交易订单）
            'platRefundNo' => $data['platRefundNo'], // 平台退款号
            'refundAmt' => $data['refundAmt'], // 退款金额
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.2.9自动确认收货申请
     */
    public function IESI111010($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'orderNo' => $data['orderNo'], // 平台订单号
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.2.10电子回单下载申请
     */
    public function IESI111068($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'applyType' => $data['applyType'], // 回单类型，1-单笔
            'transType' => $data['transType'], // 查询类型，1-交易订单 2-分账订单
            'platOrderNo' => $data['platOrderNo'], // 查询订单号，创建交易订单接口上送的orderList.platOrderNo
        ];
        $params['startDate'] = $data['startDate'] ?? null; // 起始日期，yyyyMMdd
        $params['endDate'] = $data['endDate'] ?? null; // 结束日期，yyyyMMdd
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.3.1平台充值
     */
    public function IESI111013($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'transAmt' => $data['transAmt'], // 充值金额
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.3.2平台提现
     */
    public function IESI111014($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'transAmt' => $data['transAmt'], // 提现金额
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.3.3平台自有资金分户间转账
     */
    public function IESI111015($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'outAcctType' => $data['outAcctType'], // 转出分户类型（01-普通资金分户、02-交易手续费分户、03-提现手续费分户、04-营销费用分户、05-转账验证子账户)
            'transAmt' => $data['transAmt'], // 转账金额
            'inAcctType' => $data['inAcctType'], // 转入账户类型(01-普通资金分户、02-交易手续费分户、03-提现手续费分户、04-营销费用分户、05-转账验证子账户)
        ];
        $params['remark'] = $data['remark'] ?? null; // 备注
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.3.4平台分户转会员分户
     */
    public function IESI111016($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'acctType' => $data['acctType'], // 04-营销费用分户(只支持营销分户转出到会员账户)
            'transAmt' => $data['transAmt'], // 转账金额
            'platCustNo' => $data['platCustNo'], // 转入方客户编号
        ];
        $params['remark'] = $data['remark'] ?? null; // 备注
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    const IESI111018_ACCT_TYPE_01 = "01";
    const IESI111018_ACCT_TYPE_02 = "02";
    const IESI111018_ACCT_TYPE_03 = "03";
    const IESI111018_ACCT_TYPE_04 = "04";
    const IESI111018_ACCT_TYPE_05 = "05";
    const IESI111018_ACCT_TYPE_11 = "11";
    const IESI111018_ACCT_TYPE_12 = "12";

    public function getIESI111018AcctTypeDesc()
    {
        return [
            self::IESI111018_ACCT_TYPE_01 => "普通资金分户",
            self::IESI111018_ACCT_TYPE_02 => "交易手续费分户",
            self::IESI111018_ACCT_TYPE_03 => "提现手续费分户",
            self::IESI111018_ACCT_TYPE_04 => "营销费用分户",
            self::IESI111018_ACCT_TYPE_05 => "鉴权分户",
            self::IESI111018_ACCT_TYPE_11 => "待清算资金分户", // （平台与会员均有此分户）
            self::IESI111018_ACCT_TYPE_12 => "预付货款分户", // （仅会员才有）
        ];
    }

    public function getPlatUseIESI111018AcctTypeArr()
    {
        return [
            self::IESI111018_ACCT_TYPE_01,
            self::IESI111018_ACCT_TYPE_02,
            self::IESI111018_ACCT_TYPE_03,
            self::IESI111018_ACCT_TYPE_04,
            self::IESI111018_ACCT_TYPE_05,
            self::IESI111018_ACCT_TYPE_11,
        ];
    }

    public function getCustomUseIESI111018AcctTypeArr()
    {
        return [
//            self::IESI111018_ACCT_TYPE_01,
//            self::IESI111018_ACCT_TYPE_02,
//            self::IESI111018_ACCT_TYPE_03,
//            self::IESI111018_ACCT_TYPE_04,
//            self::IESI111018_ACCT_TYPE_05,
            self::IESI111018_ACCT_TYPE_11,
            self::IESI111018_ACCT_TYPE_12,
        ];
    }

    const IESI111018_RESP_MONEY_BAL = 'bal';
    const IESI111018_RESP_MONEY_CASH_BAL = 'cashBal';
    const IESI111018_RESP_MONEY_FRZ_CASH = 'frzCash';
    const IESI111018_RESP_MONEY_FLOAT_BAL = 'floatBal';
    const IESI111018_RESP_MONEY_FRZ_FLOAT = 'frzFloat';

    public function getIESI111018RespMoneyDesc()
    {
        return [
            self::IESI111018_RESP_MONEY_BAL => "总余额", // (=现金余额+冻结现金+在途资金+冻结在途资金)
            self::IESI111018_RESP_MONEY_CASH_BAL => "现金余额",
            self::IESI111018_RESP_MONEY_FRZ_CASH => "冻结现金",
            self::IESI111018_RESP_MONEY_FLOAT_BAL => "在途资金",
            self::IESI111018_RESP_MONEY_FRZ_FLOAT => "冻结在途资金",
        ];
    }

    public function getIESI111018RespMoneyArr()
    {
        return [
            self::IESI111018_RESP_MONEY_BAL,
            self::IESI111018_RESP_MONEY_CASH_BAL,
            self::IESI111018_RESP_MONEY_FRZ_CASH,
            self::IESI111018_RESP_MONEY_FLOAT_BAL,
            self::IESI111018_RESP_MONEY_FRZ_FLOAT,
        ];
    }

    /**
     * 4.4.1	分户资金查询
     */
    public function IESI111018($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'acctType' => $data['acctType'], // 子账户类型：01-普通资金分户、02-交易手续费分户、03-提现手续费分户、04-营销费用分户05-鉴权分户11-待清算资金分户（平台与会员均有此分户）12-预付货款分户（仅会员才有）
            'transId' => $data['transId'], // 请求业务流水号
        ];
        $params['platCustNo'] = $data['platCustNo'] ?? null; // 客户编号。为空时，查询平台分户；不为空时，查询会员分户
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    const RESP_IESI111107_TRANS_TYPE_1 = '1';
    const RESP_IESI111107_TRANS_TYPE_2 = '2';

    public function getRespIESI111107TransTypeDesc()
    {
        return [
            self::RESP_IESI111107_TRANS_TYPE_1 => "支出",
            self::RESP_IESI111107_TRANS_TYPE_2 => "收入",
        ];
    }

    const RESP_IESI111107_BUSINESS_TYPE_10 = "10";
    const RESP_IESI111107_BUSINESS_TYPE_11 = "11";
    const RESP_IESI111107_BUSINESS_TYPE_12 = "12";
    const RESP_IESI111107_BUSINESS_TYPE_13 = "13";
    const RESP_IESI111107_BUSINESS_TYPE_14 = "14";
    const RESP_IESI111107_BUSINESS_TYPE_15 = "15";
    const RESP_IESI111107_BUSINESS_TYPE_16 = "16";
    const RESP_IESI111107_BUSINESS_TYPE_99 = "99";

    public function getRespIESI111107BusinessTypeDesc()
    {
        return [
            self::RESP_IESI111107_BUSINESS_TYPE_10 => "预付款充值(线上)",
            self::RESP_IESI111107_BUSINESS_TYPE_11 => "预付款充值(线下)",
            self::RESP_IESI111107_BUSINESS_TYPE_12 => "交易收入",
            self::RESP_IESI111107_BUSINESS_TYPE_13 => "清算出款",
            self::RESP_IESI111107_BUSINESS_TYPE_14 => "预付款退款",
            self::RESP_IESI111107_BUSINESS_TYPE_15 => "订单分账",
            self::RESP_IESI111107_BUSINESS_TYPE_16 => "原路退款",
            self::RESP_IESI111107_BUSINESS_TYPE_99 => "其他",
        ];
    }

    /**
     * 4.4.2	分户资金明细查询
     */
    public function IESI111107($data)
    {
        $params = [
            'transId' => $data['transId'], //请求业务流水号
            'platNo' => $this->platNo, //商户平台在分账通注册的平台编号
            'acctType' => $data['acctType'], //子账户类型：01-普通资金分户、02-交易手续费分户、03-提现手续费分户、04-营销费用分户05-鉴权分户11-待清算资金分户（平台与会员均有此分户）12-预付货款分户（仅会员才有）
            'bgnDate' => $data['bgnDate'], //请求业务流水号
            'endDate' => $data['endDate'], //请求业务流水号
        ];
        $params['platCustNo'] = $data['platCustNo'] ?? null; // 客户编号。为空时，查询平台分户；不为空时，查询会员分户
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 交易订单状态查询
     */
    public function IESI111019($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'orderNo' => $data['orderNo'], // 交易订单号
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.4.4支付订单状态查询
     */
    public function IESI111038($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'platPayId' => $data['platPayId'], // 平台支付订单号(创建支付订单时对应的platPayId)
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.4.5异步通知查询
     */
    public function IESI111111($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'oriTransId' => $data['oriTransId'], // 原请求的对应业务流水号
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.4.6开户状态查询
     */
    public function IESI111037($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'platCustNo' => $data['platCustNo'], // 客户编号
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.4.7原路退款状态查询
     */
    public function IESI111040($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'platRefundNo' => $data['platRefundNo'], // 平台退款号
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.4.8预付货款退款状态查询
     */
    public function IESI111066($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'oriTransId' => $data['oriTransId'], // 原请求业务流水号
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.4.9平台转会员记录查询
     */
    public function IESI111067($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'oriTransId' => $data['oriTransId'], // 原请求业务流水号
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.4.10查询转账结果
     */
    public function IESI111070($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'oriTransId' => $data['oriTransId'], // 原申请流水号：开户申请，新增绑卡申请的流水号
            'selectDate' => $data['selectDate'], // 查询日期 YYYYMMDD
        ];
        $params['platCustNo'] = $data['platCustNo'] ?? null; // 平台客户编号
        $params['bsnType'] = $data['bsnType'] ?? null; // 业务类型：1-开户鉴权
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.4.11绑卡列表查询
     */
    public function IESI111071($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'platCustNo' => $data['platCustNo'], // 平台客户编号
        ];
        $params['cardNo'] = $data['cardNo'] ?? null; // 卡号
        $params['oriTransId'] = $data['oriTransId'] ?? null; // 原业务流水号：原开户/新增绑卡流水号
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.4.12平台分户间转账查询
     */
    public function IESI111079($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'oriTransId' => $data['oriTransId'], // 原业务申请流水号
            'acctType' => $data['acctType'], // 账户类型 01-普通资金分户、02-交易手续费分户、03-提现手续费分户、04-营销费用分户、05-转账验证子账户
            'transType' => $data['transType'], // 交易类型：1-支出 2-收入
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.5.1对账文件下载申请
     */
    public function IESI111020($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'checkType' => $data['checkType'], // 对账类型：1-入金2-出金3-退票4-分账订单5-鉴权记录6-平台转会员记录7-平台分户间转账记录8-分户日终余额数据
            'payCheckDate' => $data['payCheckDate'], // 对账日期(yyyyMMdd)
            'payCheckFlag' => $data['payCheckFlag'], // 是否预对账1-否，2-是  （对账类型为充值或提现时必输）暂不支持预对账,填1
        ];
        $params['bgnTime'] = $data['bgnTime'] ?? null; // 开始时间(预对账必输：yyyyMMddHHmmss)
        $params['endTime'] = $data['endTime'] ?? null; // 结束时间(预对账必输：yyyyMMddHHmmss)
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.6.1文件上传申请
     */
    public function IESI111025($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'platCustNo' => $data['platCustNo'], // 客户编号
            'fileType' => $data['fileType'], // 文件类型  1）对于企业开户：01-营业执照   10-证件照正面照片   11-证件照反面照片2）对于境外客户开户：10-证件照正面照片  11-证件照反面照片  12-会员手持证件照片3）对于企业绑卡：02-开户许可证4）对于会员线下转入开通（共10份，必上传1份）21-业务材料122-业务材料2……30-业务材料105）对于开通会员间分户转账（共10份，必上传1份）31-业务材料132-业务材料2……40-业务材料106）上传分户转账凭证（共10份，必上传1份）41-交易凭证142-交易凭证2……50-交易凭证10
            'md5' => $data['md5'], // 文件MD5
        ];
        $params['bsnType'] = $data['bsnType'] ?? null; // 业务类型:1-开户(默认)  2-企业绑卡3-会员线下转入开通4-开通分户间转账功能5-上传分户间转账凭证企业客户新增绑卡时必输;会员申请开通线下转入功能时必输；开通分户间转账功能、会员间分户转账功能时必输
        $params['refData'] = $data['refData'] ?? null; // 关联数据 （说明：当业务类型为 2：绑卡时此字段送绑卡账号）2-企业客户新增绑卡时必输5-分户间转账凭证上传时上送凭证编号
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.8.1支付凭证报关申请
     */
    public function IESI111042($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'payerMobile' => $data['payerMobile'], // 支付人手机号码
            'payerIdNo' => $data['payerIdNo'], // 支付人身份证号
            'payerIdType' => $data['payerIdType'], // 支付人证件类型:1-身份证
            'payerName' => $data['payerName'], // 支付人姓名
            'oriOrderNo' => $data['oriOrderNo'], // 平台支付订单号(创建支付订单时对应的platPayId)
            'orderAmt' => $data['orderAmt'], // 平订单金额
            'remark' => $data['remark'], // 备注
            'appType' => $data['appType'], // 应用类型1-新增
            'customs' => $data['customs'], // 海关代码：NB-宁波海关GZ-广州海关
            'orderNo' => $data['orderNo'], // 海关订单号
        ];
        $params['entCode'] = $data['entCode'] ?? null; // 海关企业编码
        $params['splitFlag'] = $data['splitFlag'] ?? null; // 是否拆单：Y-是N-否默认为N
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.8.2支付凭证报关查询
     */
    public function IESI111043($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'oriTransId' => $data['oriTransId'], // 原业务流水号，报关申请的流水号transId
            'orderNo' => $data['orderNo'], // 海关订单号
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.9.1支付订单状态同步
     */
    public function IESI111047($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'platPayId' => $data['platPayId'], // 平台支付订单号(创建支付订单时对应的platPayId)
            'payCode' => $data['payCode'], // 098-微信（外部）097-支付宝（外部）081-二级商户微信(外部)082-二级商户支付宝(外部)083-二级商户预付卡(外部)096-银联条码(外部)
            'merchOrderNo' => $data['merchOrderNo'], // 商户订单号，调用支付机构时上送的订单号
        ];
        $params['payDate'] = $data['payDate'] ?? null; // 格式：yyyyMMdd,支付日期、交易日期
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.9.2退款订单状态同步
     */
    public function IESI111048($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'payCode' => $data['payCode'], // 支付渠道：098-微信（外部）097-支付宝（外部）081-二级商户微信(外部)082-二级商户支付宝(外部)083-二级商户预付卡(外部)096-银联条码(外部)
            'platRefundNo' => $data['platRefundNo'], // 平台退款订单号：平台原路退款申请时上送的平台退款号（platRefundNo）
            'merchOrderNo' => $data['merchOrderNo'], // 商户订单号：向支付机构申请退款时，上送支付机构的订单号
            'merchRefundNo' => $data['merchRefundNo'], // 商户退款订单号：向支付机构申请退款时，上送支付机构的退款订单号
            'refundAmt' => $data['refundAmt'], // 退款金额
            'refundDate' => $data['refundDate'], // 格式：yyyyMMdd
            'refundStat' => $data['refundStat'], // 退款状态：1-成功2-失败失败也需要通知状态
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.10.1鉴权绑卡申请
     */
    public function IESI111050($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'userNo' => $data['userNo'], // 用户标识
            'userType' => $data['userType'], // 用户标识类型:USER_ID(用户ID）
            'userName' => $data['userName'], // 用户姓名
            'idNo' => $data['idNo'], // 证件号
            'idType' => $data['idType'], // 证件类型（A-身份证）
            'mobileNo' => $data['mobileNo'], // 手机号
            'openBank' => $data['openBank'], // 开户行（见分账通银行代码表）
            'cardNo' => $data['cardNo'], // 卡号
        ];
        $params['cvv2'] = $data['cvv2'] ?? null; // 信用卡cvv2
        $params['validateDate'] = $data['validateDate'] ?? null; // 信用卡有效期（mmyy）
        $params['authType'] = $data['authType'] ?? null; // 验证类型(验证项的值如下：值（描述）COMMON_FOUR （验证四项信息，分别为：卡+身份证+姓名+手机号，这四项都不能为空）CREDIT_SIX （验证六项信息，分别为： 卡+身份证+姓名+手机号+cvv+有效期，这六项都不能为空默认验证四项)
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.10.2鉴权绑卡短验申请
     */
    public function IESI111051($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'oriTransId' => $data['oriTransId'], // 原交易流水号
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.10.3鉴权绑卡确认短验
     */
    public function IESI111052($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'oriTransId' => $data['oriTransId'], // 原交易流水号
            'phoneDynCode' => $data['phoneDynCode'], // 短信验证码
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.10.4绑卡支付申请
     */
    public function IESI111053($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'platPayId' => $data['platPayId'], // 平台支付订单号(创建支付订单时对应的platPayId)
            'payCardNo' => $data['payCardNo'], // 支付卡号
            'userType' => $data['userType'], // 用户标识类型
            'userIp' => $data['userIp'], // 用户IP
            'userNo' => $data['userNo'], // 用户标识
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.10.5绑卡支付短验申请
     */
    public function IESI111054($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'oriTransId' => $data['oriTransId'], // 原始请求流水号
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.10.6绑卡支付确认短验
     */
    public function IESI111055($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'oriTransId' => $data['oriTransId'], // 原始请求流水号
            'phoneDynCode' => $data['phoneDynCode'], // 短信验证码
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.10.7鉴权绑卡订单状态查询
     */
    public function IESI111056($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'oriTransId' => $data['oriTransId'], // 原始请求流水号
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.10.8卡bin信息查询
     */
    public function IESI111057($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'cardNo' => $data['cardNo'], // 银行卡号
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.10.9绑卡列表查询
     */
    public function IESI111058($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'userNo' => $data['userNo'], // 用户标识
            'userType' => $data['userType'], // 用户标识类型：USER_ID
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.11.1开通会员分户间转账
     */
    public function IESI111072($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'platCustNo' => $data['platCustNo'], // 平台客户编号
            'applyType' => $data['applyType'], // 开通类型1-申请2-复核3-拒绝
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.11.2电子凭证信息同步
     */
    public function IESI111073($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'platOrderNo' => $data['platOrderNo'], // 平台订单号，转账编号
            'certId' => $data['certId'], // 凭证编号
            'certSubId' => $data['certSubId'], // 凭证子编号
            'payerId' => $data['payerId'], // 付款人客编
            'payeeId' => $data['payeeId'], // 收款人客编
            'transAmt' => $data['transAmt'], // 支付金额
            'exchangeFlag' => $data['exchangeFlag'], // 是否可流转：Y-是N-否
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.11.3会员分户间转账
     */
    public function IESI111074($data)
    {
        $params = [
            'transId' => $data['transId'], // 请求业务流水号
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'platOrderNo' => $data['platOrderNo'], // 平台订单号，转账编号
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.12.1开户接口
     */
    public function IESI111075($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'custName' => $data['custName'], // 姓名
            'idType' => $data['idType'], // 证件类型：（A-身份证 E-港澳居民往来大陆通行证 F-台湾居民往来大陆通行证）
            'idNo' => $data['idNo'], // 证件号码
            'mobileNo' => $data['mobileNo'], // 预留手机号码
            'openBank' => $data['openBank'], // 开户银行，行号(支持的银行列表参考5.2,对应行号在bankCode.csv里提供)
            'cardNo' => $data['cardNo'], // 卡号
            'notifyUrl' => $data['notifyUrl'], // 通知回调地址
        ];
        $params['birthDay'] = $data['birthDay'] ?? null; // 出生日期  YYYYMMDD
        $params['email'] = $data['email'] ?? null; // 电子邮箱地址
        $params['legalExpireDate'] = $data['legalExpireDate'] ?? null; // 证件到期日期YYYYMMDD (若有)
        $params['legalAuthDate'] = $data['legalAuthDate'] ?? null; // 证件签发日期YYYYMMDD (若有)
        $params['occupation'] = $data['occupation'] ?? null; // 职业（0001: 国家机关、党群组织、企业、事业单位负责人,0002: 专业技术人员,0003: 办事人员和有关人员,0004: 商业工作人员,0005: 服务性工作人员,0006: 农、林、牧、渔、水利业生产人员,0007: 生产、运输设备操作人员及有关人员,0008: 军人,0009: 不便分类的其他从业人员）
        $params['address'] = $data['address'] ?? null; // 联系地址
        $params['legalAddress'] = $data['legalAddress'] ?? null; // 证件地址
        $params['issueOffice'] = $data['issueOffice'] ?? null; // 发证机关：XXX公安局
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.12.2销户接口
     */
    public function IESI111076($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'platCustNo' => $data['platCustNo'], // 平台客户编
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.12.3新增绑卡
     */
    public function IESI111077($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'platCustNo' => $data['platCustNo'], // 平台客户编
            'openBank' => $data['openBank'], // 开户行
            'cardNo' => $data['cardNo'], // 卡号
        ];
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    /**
     * 4.12.4修改客户信息
     */
    public function IESI111078($data)
    {
        $params = [
            'platNo' => $this->platNo, // 商户平台在分账通注册的平台编号
            'transId' => $data['transId'], // 请求业务流水号
            'platCustNo' => $data['platCustNo'], // 平台客户编
            'operType' => $data['operType'], // 操作类型：01：修改结算户（卡号必输）02：修改姓名（姓名必输）03：修改预留手机号（手机号必输）04：修改身份证号（证件类型及证件号码必输）05：修改现有绑定卡账号（现有绑定卡账号、修改后的绑定卡账号以及修改后的开户行必输）
        ];
        $params['custName'] = $data['custName']; // 客户名称,当操作类型为02时必输
        $params['idType'] = $data['idType']; // 证件类型:A-身份证  E-港澳居民往来大陆通行证F-台湾居民往来大陆通行证操作类型为04时必输
        $params['idNo'] = $data['idNo']; // 证件号码,操作类型为04时必输，输入修改后的身份证
        $params['mobileNo'] = $data['mobileNo']; // 手机号码，当操作类型为03时必输
        $params['openBank'] = $data['openBank']; // 开户行，操作类型为05时必输
        $params['oriCardNo'] = $data['oriCardNo']; // 原卡号(账号),操作类型为05时必输
        $params['cardNo'] = $data['cardNo']; // 卡号(账号)，当要素类型为01和05时必输01：输入需要更换为结算账户的卡号(账号)05：输入修改后的绑定卡账号
        $res = $this->getResult(__FUNCTION__, $params);
        return $res;
    }

    public function getRouteDesc()
    {
        $desc = [
            'IESI111001' => "个人客户注册申请",
            'IESI111003' => "企业客户注册申请",
            'IESI111101' => "快捷支付账号绑卡申请",
            'IESI111102' => "快捷支付账号绑卡验证",
            'IESI111103' => "结算账户修改申请",
            'IESI111104' => "修改手机号码申请",
            'IESI111006' => "交易密码设置申请",
            'IESI111060' => "短信验证码申请",
            'IESI111061' => "开户提交验证",
            'IESI111062' => "电子账户余额查询",
            'IESI111063' => "电子账户提现申请",
            'IESI111064' => "电子账户提现结果查询",
            'IESI111069' => "会员申请开通线下转入",
            'IESI111044' => "会员信补录申请",
            'IESI111007' => "创建交易订单",
            'IESI111008' => "创建支付订单",
            'IESI111030' => "微信支付申请",
            'IESI111110' => "打开收银台申请",
            'IESI111105' => "交易订单分账申请",
            'IESI111112' => "交易订单分账审核",
            'IESI111106' => "预付货款退款",
            'IESI111039' => "原路退款申请",
            'IESI111010' => "自动确认收货申请",
            'IESI111013' => "平台充值",
            'IESI111014' => "平台提现",
            'IESI111015' => "平台自有资金分户间转账",
            'IESI111016' => "平台分户转会员分户",
            'IESI111018' => "分户资金查询",
            'IESI111107' => "分户资金明细查询",
            'IESI111019' => "交易订单状态查询",
            'IESI111038' => "支付订单状态查询",
            'IESI111111' => "异步通知查询",
            'IESI111037' => "开户状态查询",
            'IESI111040' => "原路退款状态查询",
            'IESI111066' => "预付货款退款查询",
            'IESI111067' => "平台转会员记录查询",
            'IESI111070' => "查询转账结果",
            'IESI111071' => "绑卡列表查询",
            'IESI111020' => "对账文件下载申请",
            'IESI111025' => "文件上传申请",
            'IESI111042' => "支付凭证报关申请接口",
            'IESI111043' => "支付凭证报关查询接口",
            'IESI111047' => "支付订单状态同步",
            'IESI111048' => "退款订单状态同步",
            'IESI111050' => "鉴权绑卡申请",
            'IESI111051' => "鉴权绑卡短信申请",
            'IESI111052' => "鉴权绑卡短验确认",
            'IESI111053' => "绑卡支付申请",
            'IESI111054' => "绑卡支付短验申请",
            'IESI111055' => "绑卡支付短验确认",
            'IESI111056' => "单笔鉴权绑卡记录查询",
            'IESI111057' => "卡bin信息查询",
            'IESI111058' => "绑卡信息列表查询",
            'IESI111072' => "开通会员分户间转账",
            'IESI111073' => "电子凭证信息同步",
            'IESI111074' => "会员分户间转账",
            'IESI111075' => "开户接口",
            'IESI111076' => "销户接口",
            'IESI111077' => "新增绑卡",
            'IESI111078' => "修改客户信息",
        ];
        return $desc;
    }

    public function getRespCodeDesc()
    {
        $desc = [
            '00000' => "请求接口成功",
            'E010110001' => "平台状态异常",
            'E010110002' => "查询客户信息失败",
            'E010110003' => "该用户还未绑卡，不能进行解绑",
            'E010110004' => "客户信息不存在",
            'E010110005' => "交易订单信息不存在",
            'E010110006' => "非法金额",
            'E010110007' => "非法token",
            'E010110008' => "参数[{0}]不存在",
            'E010110009' => "交易订单不存在",
            'E010110010' => "该笔交易订单不属于查询平台",
            'E010110011' => "交易订单未支付",
            'E010110012' => "不支持的验证方式",
            'E010110013' => "短信验证码或支付密码验证失败",
            'E010110014' => "自动确认收货时间未设置",
            'E010110015' => "时间未到",
            'E010110016' => "订单未支付",
            'E010110017' => "更新支付状态和日期错误",
            'E010110018' => "绑卡申请信息不存在",
            'E010110019' => "转账失败",
            'E010110020' => "平台账号未配置",
            'E010110021' => "客户子账户未开户",
            'E010110022' => "银联实名认证失败",
            'E010110023' => "短信验证码错误",
            'E010110024' => "该客户已注册",
            'E010110025' => "请求失败",
            'E010110026' => "账户不存在",
            'E010110027' => "转账失败",
            'E010110028' => "查无转账记录",
            'E010110029' => "回调通知失败",
            'E010110030' => "快捷支付调用失败",
            'E010110031' => "个人开户绑卡申请失败",
            'E010110032' => "个人开户绑卡认证失败",
            'E010110033' => "充值订单状态查询失败",
            'E010110034' => "网关充值请求失败",
            'E010110035' => "子账户冻结失败",
            'E010110036' => "平台号为空",
            'E010110037' => "未找到平台子账户",
            'E010110038' => "对账文件获取失败",
            'E010110039' => "该渠道无支持银行信息",
            'E010110040' => "该平台无支付渠道信息",
            'E010110041' => "支付渠道信息有误",
            'E010110042' => "请求参数异常",
            'E010110043' => "请求失败",
            'E010110044' => "子账户余额查询失败",
            'E010110045' => "绑卡或客户信息不存在",
            'E010110046' => "该卡[{0}]未绑定",
            'E010110047' => "绑定卡未通过审核，无法进行{0}",
            'E010110048' => "提现失败",
            'E010110049' => "客户状态异常",
            'E010110050' => "身份证验证失败",
            'E010110051' => "平台子账户未配置",
            'E010110052' => "转账登记信息不存在",
            'E010110053' => "转账金额为负",
            'E010110054' => "平台交易订单号重复,订单已存在",
            'E010110055' => "交易订单数量异常",
            'E010110056' => "交易金额异常",
            'E010110057' => "绑定卡{0}无法识别",
            'E010110058' => "交易请求流水信息不存在",
            'E010110059' => "银行卡信息异常",
            'E010110060' => "商户信息异常",
            'E010110061' => "请求第三方支付失败[{0}]",
            'E010110062' => "订单状态异常",
            'E010110063' => "子账户流水查询失败",
            'E010110064' => "提现金额为0",
            'E010110065' => "请求流水号重复",
            'E010110066' => "交易订单不存在",
            'E010110067' => "子账户解冻失败",
            'E010110068' => "无法识别PCP通知状态",
            'E010110069' => "平台异步通知信息不存在",
            'E010110070' => "会话已失效",
            'E010110071' => "支付订单不存在",
            'E010110072' => "交易订单状态异常",
            'E010110073' => "退款总金额不得大于订单金额",
            'E010110074' => "退款订单信息不存在",
            'E010110075' => "流水检查异常",
            'E010110076' => "子账户充值异常",
            'E010110077' => "支付回调信息为空",
            'E010110078' => "支付失败",
            'E010110079' => "订单已支付，请不要重复操作",
            'E010110080' => "支付部分信息为空",
            'E010110081' => "支付金额与交易订单金额不符，请确定",
            'E010110082' => "担保类型为空",
            'E010110083' => "无法识别此担保类型",
            'E010110084' => "买方客编不一致",
            'E010110085' => "不支持此支付方式",
            'E010110086' => "交易金额必须大于0",
            'E010110087' => "文件类型为空",
            'E010110088' => "客户审核已通过",
            'E010110089' => "不支持的文件类型{0}",
            'E010110090' => "平台回单权限失败",
            'E010110091' => "获取信息失败",
            'E010110092' => "凭证类型错误",
            'E010110093' => "文件盖章失败",
            'E010110094' => "同一笔支付的交易信息不一致",
            'E010110095' => "开立虚拟卡号失败",
            'E010110096' => "发送验证码失败",
            'E010110097' => "平台配置参数异常",
            'E010110098' => "不支持的证件类型",
            'E010110099' => "未实名认证",
            'E010110100' => "更新客户结算账户信息失败",
            'E010110101' => "会话超时",
            'E010110102' => "操作异常",
            'E010110103' => "此卡是信用卡",
            'E010110104' => "此卡状态无效",
            'E010110105' => "此卡已经是结算卡",
            'E010110106' => "重置密码身份验证失败",
            'E010110107' => "非待支付订单",
            'E010110108' => "支付订单已过期",
            'E010110109' => "该卡不支持快捷支付",
            'E010110110' => "绑定卡号验证失败",
            'E010110111' => "设置密码错误",
            'E010110112' => "重复绑卡",
            'E010110113' => "非法参数",
            'E010110114' => "非法订单类型",
            'E010110115' => "订单未支付",
            'E010110116' => "订单支付受理中，请稍候查询支付结果, 不要重复提交",
            'E010110117' => "开始日期不能为空",
            'E010110118' => "账户类型不能为空",
            'E010110119' => "日期格式错误，正确格式：yyyyMMdd",
            'E010110120' => "非担保交易类型",
            'E010110121' => "此交易订单不支持分账",
            'E010110122' => "订单分账：找不到平台待清算子账号",
            'E010110123' => "订单分账：找不到平台待清算子账号对应的客编",
            'E010110124' => "快捷支付接口访问时只支持借记卡",
            'E010110125' => "平台子账户类型相同",
            'E010110126' => "交易订单不属于同一个用户",
            'E010110127' => "交易订单不属于该用户",
            'E010110128' => "异步通知信息不存在",
            'E010110129' => "交易订单买卖双方不能一样",
            'E010110130' => "交易订单重复",
            'E010110131' => "交易金额小于卖家手续费",
            'E010110132' => "支付订单重复",
            'E010110133' => "未绑定结算卡",
            'E010110134' => "订单分账：必须是非担保",
            'E010110135' => "证件号码不能为空",
            'E010110136' => "短信验证码不能为空",
            'E010110137' => "原始密码不能为空",
            'E010110138' => "该平台普通会员不支持担保交易",
            'E010110139' => "银行卡发卡行号错误",
            'E010110140' => "银行卡是贷记卡",
            'E010110141' => "银行卡是借记卡",
            'E010110142' => "取现金额不能低于1分钱",
            'E010110143' => "支付订单会员错误",
            'E010110144' => "预付货款账户为空",
            'E010110145' => "买家不能为平台",
            'E010110146' => "待清算账户为空",
            'E010110147' => "退款申请信息不存在",
            'E010110148' => "支付流水不存在",
            'E010110149' => "支付流水状态错误",
            'E010110150' => "清算提现登记信息不存在",
            'E010110151' => "提现金额必须大于{0}",
            'E010110152' => "手续费费率不能为负数",
            'E010110153' => "不能给自己分账",
            'E010110154' => "微信商户信息为空",
            'E010110155' => "平台的微信AppSecret未配置",
            'E010110156' => "退款申请信息不存在",
            'E010110157' => "清算登记信息不存在",
            'E010110158' => "不支持的分户类型",
            'E010110159' => "无此接口访问权限",
            'E010110160' => "获取平台最低退款手续费出错",
            'E010110161' => "客户[{0}]不存在",
            'E010110162' => "开始日期[{0}]不能小于[{1}]",
            'E010110163' => "开始日期[{0}]不能大于结束日期[{1}]",
            'E010110164' => "开始日期[{0}]不能大于当日日期[{1}]",
            'E010110165' => "清算子账户不能进行转账",
            'E010110167' => "手续费费率[{0}]高于最高手续费费率[{1}]",
            'E010110168' => "卡号[{0}]正在进行转账,请耐心等待!",
            'E010110169' => "卡号[{0}]今日转账次数已达上限[{1}],请改日重试!",
            'E010110170' => "平台[{0}]业务参数[{1}]设置错误!",
            'E010110171' => "该卡[{0}]今日转账次数已达上限, 请勿频繁操作!",
            'E010110172' => "获取参数错误，请重试!",
            'E010110173' => "转账已过期，请重新转账!",
            'E010110174' => "转账结果查询失败, 请重试!",
            'E010110175' => "转账失败, 请检查卡号[{0}] 户名[{1}]是否正确!",
            'E010110176' => "转账处理中, 请稍候重试!",
            'E010110166' => "获取平台退款最高手续费费率出错",
            'E010110177' => "错误次数已达上限, 请重新转账验证!",
            'E010110178' => "转账金额错误!",
            'E010110179' => "转账状态异常，无法进行身份校验!",
            'E010110180' => "客户[{0}]未实名认证",
            'E010110181' => "客户[{0}]状态异常",
            'E010110182' => "当前订单状态为[{0}], 新分账订单状态只能为[{1},{2}]",
            'E010110183' => "当前订单状态[{0}]不支持审核",
            'E010110184' => "不支持多种订单状态审核",
            'E010110185' => "审核订单列表不允许有重复的订单",
            'E010110186' => "分账订单[{0}]不存在",
            'E010110187' => "查无分账订单",
            'E010110188' => "分账订单[{0}]状态[{1}]异常",
            'E010110189' => "原订单不一样，不能同时进行二审",
            'E010110190' => "子账户退汇异常",
            'E010110191' => "不支持多个订单同时进行审核",
            'E010110192' => "回调信息已处理",
            'E010110193' => "转账金额不能为空",
            'E010110194' => "支付订单状态异常",
            'E010110195' => "保存数据失败：[{0}]",
            'E010110196' => "结算账户不存在",
            'E010110197' => "绑卡状态异常",
            'E010110198' => "虚拟卡账号未找到",
            'E010010027' => "超过最大可重试次数",
            'E010010028' => "非法验证码检查",
            'E010010029' => "验证码校验失败",
            'E010010030' => "请输入验证码",
            'E010110199' => "微信支付申请参数{0}不能为空",
            'E010110200' => "退款申请信息不存在",
            'E010110201' => "担保交易订单才能退款",
            'E010110202' => "退款只支持父订单",
            'E010110203' => "退款金额不能超出[{0}]",
            'E010110204' => "外部退款记录不存在",
            'E010110205' => "订单可退款额度为0",
            'E010110206' => "超过支付时间{0}天的订单不能退款",
            'E010110207' => "退款处理失败",
            'E010110208' => "暂不支持易宝退款",
            'E010110209' => "退款子记录不存在",
            'E010110210' => "平台退款号重复",
            'E010110211' => "企业海关注册信息为空",
            'E010110212' => "支付凭证报关信息为空",
            'E010110213' => "今日退款金额已超过限额",
            'E010110214' => "不支持的实名鉴权渠道",
            'E010110215' => "操作过于频繁,请稍后重试",
            'E010110216' => "客户[{0}]状态异常，暂不支持此交易，请联系客服",
            'E010110217' => "转入预付货款启用日期晚于今天",
            'E010110218' => "预付款退款可退款余额不足",
            'E010110219' => "该平台不支持外部入金",
            'E010110220' => "外部入金商户信息为空",
            'E010110221' => "退款金额不符",
            'E010110222' => "退款结果已处理，请不要重复操作",
            'E010110223' => "身份证号码错误",
            'E010110224' => "平台该渠道当日可退款金额不足",
            'E010110225' => "平台不属于该渠道商",
            'E010110226' => "渠道商状态异常",
            'E010110227' => "银行卡验证失败:{0}",
            'E010110228' => "电子账户已经开立成功",
            'E010110229' => "开立电子账户异常",
            'E010110230' => "开立卡异常",
            'E010110231' => "电子账户交易订单信息为空",
            'E010110232' => "客户涉及电信诈骗",
            'E010110233' => "客户验证失败:{0}",
            'E010110234' => "账户不属于该客户",
            'E010110235' => "账户可提现余额不足",
            'E010110236' => "电子账户已开立成功",
            'E010110237' => "查询电子账户信息失败",
            'E010110238' => "原业务流水号为空",
            'E010110239' => "请求参数[{0}]不能为空",
            'E010110240' => "不支持的交易类型",
            'E010110241' => "禁止平台转会员",
            'E010110242' => "超过平台转会员额度",
            'E010110243' => "查询失败",
            'E010110244' => "起始日期和结束日期间隔不能大于90天",
        ];
        return $desc;
    }

    public function getBanks()
    {
        $banks = [
            ['code' => "100001", 'name' => "厦门国际银行股份有限公司", 'shotName' => "厦门国际银行",],
            ['code' => "100002", 'name' => "中国工商银行", 'shotName' => "中国工商银行",],
            ['code' => "100003", 'name' => "中国农业银行股份有限公司", 'shotName' => "中国农业银行",],
            ['code' => "100004", 'name' => "中国银行总行", 'shotName' => "中国银行",],
            ['code' => "100005", 'name' => "中国建设银行股份有限公司总行", 'shotName' => "中国建设银行",],
            ['code' => "100006", 'name' => "交通银行", 'shotName' => "交通银行",],
            ['code' => "100007", 'name' => "中信银行股份有限公司", 'shotName' => "中信银行",],
            ['code' => "100008", 'name' => "中国光大银行", 'shotName' => "中国光大银行",],
            ['code' => "100009", 'name' => "华夏银行股份有限公司总行", 'shotName' => "华夏银行",],
            ['code' => "100010", 'name' => "中国民生银行", 'shotName' => "中国民生银行",],
            ['code' => "100011", 'name' => "广发银行股份有限公司", 'shotName' => "广发银行",],
            ['code' => "100012", 'name' => "平安银行（原深圳发展银行）", 'shotName' => "平安银行",],
            ['code' => "100013", 'name' => "招商银行股份有限公司", 'shotName' => "招商银行",],
            ['code' => "100014", 'name' => "兴业银行总行", 'shotName' => "兴业银行",],
            ['code' => "100015", 'name' => "上海浦东发展银行", 'shotName' => "上海浦东发展银行",],
            ['code' => "100017", 'name' => "北京银行", 'shotName' => "北京银行",],
            ['code' => "100018", 'name' => "天津银行股份有限公司", 'shotName' => "天津银行",],
            ['code' => "100019", 'name' => "河北银行股份有限公司", 'shotName' => "河北银行",],
            ['code' => "100020", 'name' => "邯郸市商业银行股份有限公司", 'shotName' => "邯郸银行",],
            ['code' => "100021", 'name' => "邢台银行股份有限公司", 'shotName' => "邢台银行",],
            ['code' => "100022", 'name' => "张家口市商业银行股份有限公司", 'shotName' => "张家口市商业银行",],
            ['code' => "100023", 'name' => "承德银行股份有限公司", 'shotName' => "承德银行",],
            ['code' => "100024", 'name' => "沧州银行", 'shotName' => "沧州银行",],
            ['code' => "100025", 'name' => "廊坊银行", 'shotName' => "廊坊银行",],
            ['code' => "100026", 'name' => "晋商银行股份有限公司", 'shotName' => "晋商银行",],
            ['code' => "100027", 'name' => "晋城银行股份有限公司", 'shotName' => "晋城银行",],
            ['code' => "100028", 'name' => "内蒙古银行", 'shotName' => "内蒙古银行",],
            ['code' => "100029", 'name' => "包商银行股份有限公司", 'shotName' => "包商银行",],
            ['code' => "100030", 'name' => "鄂尔多斯银行股份有限公司", 'shotName' => "鄂尔多斯银行",],
            ['code' => "100031", 'name' => "大连银行", 'shotName' => "大连银行",],
            ['code' => "100032", 'name' => "鞍山市商业银行", 'shotName' => "鞍山银行",],
            ['code' => "100033", 'name' => "锦州银行", 'shotName' => "锦州银行",],
            ['code' => "100034", 'name' => "葫芦岛银行股份有限公司", 'shotName' => "葫芦岛银行",],
            ['code' => "100035", 'name' => "营口银行股份有限公司资金清算中心", 'shotName' => "营口银行",],
            ['code' => "100036", 'name' => "阜新银行结算中心", 'shotName' => "阜新银行",],
            ['code' => "100037", 'name' => "吉林银行", 'shotName' => "吉林银行",],
            ['code' => "100038", 'name' => "龙江银行股份有限公司", 'shotName' => "龙江银行",],
            ['code' => "100039", 'name' => "上海银行", 'shotName' => "上海银行",],
            ['code' => "100040", 'name' => "南京银行股份有限公司", 'shotName' => "南京银行",],
            ['code' => "100041", 'name' => "江苏银行股份有限公司", 'shotName' => "江苏银行",],
            ['code' => "100042", 'name' => "苏州银行股份有限公司", 'shotName' => "苏州银行",],
            ['code' => "100043", 'name' => "江苏长江商业银行", 'shotName' => "江苏长江商业银行",],
            ['code' => "100044", 'name' => "杭州银行股份有限公司", 'shotName' => "杭州银行",],
            ['code' => "100045", 'name' => "宁波银行股份有限公司", 'shotName' => "宁波银行",],
            ['code' => "100046", 'name' => "温州银行股份有限公司", 'shotName' => "温州银行",],
            ['code' => "100047", 'name' => "嘉兴银行股份有限公司清算中心(不对外办理业务）", 'shotName' => "嘉兴银行",],
            ['code' => "100048", 'name' => "湖州银行股份有限公司", 'shotName' => "湖州银行",],
            ['code' => "100049", 'name' => "绍兴银行股份有限公司营业部", 'shotName' => "绍兴银行",],
            ['code' => "100050", 'name' => "浙江稠州商业银行", 'shotName' => "浙江稠州商业银行",],
            ['code' => "100051", 'name' => "台州银行股份有限公司", 'shotName' => "台州银行",],
            ['code' => "100052", 'name' => "浙江泰隆商业银行", 'shotName' => "浙江泰隆商业银行",],
            ['code' => "100053", 'name' => "浙江民泰商业银行", 'shotName' => "浙江民泰商业银行",],
            ['code' => "100054", 'name' => "福建海峡银行股份有限公司", 'shotName' => "福建海峡银行",],
            ['code' => "100055", 'name' => "厦门银行股份有限公司", 'shotName' => "厦门银行",],
            ['code' => "100056", 'name' => "泉州银行股份有限公司(不对外营业)", 'shotName' => "泉州银行",],
            ['code' => "100057", 'name' => "南昌银行", 'shotName' => "南昌银行",],
            ['code' => "100058", 'name' => "赣州银行股份有限公司", 'shotName' => "赣州银行",],
            ['code' => "100059", 'name' => "上饶银行", 'shotName' => "上饶银行",],
            ['code' => "100060", 'name' => "齐鲁银行", 'shotName' => "齐鲁银行",],
            ['code' => "100061", 'name' => "青岛银行", 'shotName' => "青岛银行",],
            ['code' => "100062", 'name' => "齐商银行", 'shotName' => "齐商银行",],
            ['code' => "100063", 'name' => "东营市商业银行", 'shotName' => "东营银行",],
            ['code' => "100064", 'name' => "烟台银行股份有限公司", 'shotName' => "烟台银行",],
            ['code' => "100065", 'name' => "潍坊银行", 'shotName' => "潍坊银行",],
            ['code' => "100066", 'name' => "济宁银行股份有限公司", 'shotName' => "济宁银行",],
            ['code' => "100067", 'name' => "泰安市商业银行", 'shotName' => "泰安市商业银行",],
            ['code' => "100068", 'name' => "莱商银行", 'shotName' => "莱商银行",],
            ['code' => "100069", 'name' => "威海市商业银行", 'shotName' => "威海市商业银行",],
            ['code' => "100070", 'name' => "德州银行股份有限公司", 'shotName' => "德州银行",],
            ['code' => "100071", 'name' => "临商银行股份有限公司", 'shotName' => "临商银行",],
            ['code' => "100072", 'name' => "日照银行股份有限公司", 'shotName' => "日照银行",],
            ['code' => "100073", 'name' => "郑州银行", 'shotName' => "郑州银行",],
            ['code' => "100074", 'name' => "开封市商业银行", 'shotName' => "开封市商业银行",],
            ['code' => "100075", 'name' => "洛阳银行", 'shotName' => "洛阳银行",],
            ['code' => "100076", 'name' => "漯河市商业银行", 'shotName' => "漯河银行",],
            ['code' => "100077", 'name' => "商丘市商业银行股份有限公司", 'shotName' => "商丘银行",],
            ['code' => "100078", 'name' => "南阳银行股份有限公司", 'shotName' => "南阳银行",],
            ['code' => "100079", 'name' => "汉口银行资金清算中心", 'shotName' => "汉口银行",],
            ['code' => "100080", 'name' => "长沙银行股份有限公司", 'shotName' => "长沙银行",],
            ['code' => "100081", 'name' => "广州银行", 'shotName' => "广州银行",],
            ['code' => "100082", 'name' => "珠海华润银行股份有限公司清算中心", 'shotName' => "珠海华润银行",],
            ['code' => "100083", 'name' => "广东华兴银行股份有限公司", 'shotName' => "广东华兴银行",],
            ['code' => "100084", 'name' => "广东南粤银行股份有限公司", 'shotName' => "广东南粤银行",],
            ['code' => "100085", 'name' => "东莞银行股份有限公司", 'shotName' => "东莞银行",],
            ['code' => "100086", 'name' => "广西北部湾银行", 'shotName' => "广西北部湾银行",],
            ['code' => "100087", 'name' => "柳州银行股份有限公司清算中心", 'shotName' => "柳州银行",],
            ['code' => "100088", 'name' => "桂林银行股份有限公司", 'shotName' => "桂林银行",],
            ['code' => "100089", 'name' => "重庆银行", 'shotName' => "重庆银行",],
            ['code' => "100090", 'name' => "自贡市商业银行清算中心", 'shotName' => "自贡市商业银行",],
            ['code' => "100091", 'name' => "攀枝花市商业银行", 'shotName' => "攀枝花市商业银行",],
            ['code' => "100092", 'name' => "德阳银行股份有限公司", 'shotName' => "德阳银行",],
            ['code' => "100093", 'name' => "绵阳市商业银行", 'shotName' => "绵阳市商业银行",],
            ['code' => "100094", 'name' => "贵阳市商业银行", 'shotName' => "贵阳银行",],
            ['code' => "100095", 'name' => "富滇银行股份有限公司运营管理部", 'shotName' => "富滇银行",],
            ['code' => "100096", 'name' => "长安银行股份有限公司", 'shotName' => "长安银行",],
            ['code' => "100097", 'name' => "兰州银行股份有限公司", 'shotName' => "兰州银行",],
            ['code' => "100098", 'name' => "青海银行股份有限公司营业部", 'shotName' => "青海银行",],
            ['code' => "100099", 'name' => "宁夏银行总行清算中心", 'shotName' => "宁夏银行",],
            ['code' => "100100", 'name' => "乌鲁木齐市商业银行清算中心", 'shotName' => "乌鲁木齐市商业银行",],
            ['code' => "100101", 'name' => "昆仑银行股份有限公司", 'shotName' => "昆仑银行",],
            ['code' => "100103", 'name' => "太仓农村商业银行", 'shotName' => "太仓农村商业银行",],
            ['code' => "100104", 'name' => "昆山农村商业银行", 'shotName' => "昆山农村商业银行",],
            ['code' => "100105", 'name' => "吴江农村商业银行清算中心", 'shotName' => "吴江农村商业银行",],
            ['code' => "100106", 'name' => "江苏常熟农村商业银行股份有限公司清算中心", 'shotName' => "常熟农村商业银行",],
            ['code' => "100107", 'name' => "张家港农村商业银行", 'shotName' => "张家港农村商业银行",],
            ['code' => "100108", 'name' => "广州农村商业银行股份有限公司", 'shotName' => "广州农村商业银行",],
            ['code' => "100109", 'name' => "佛山顺德农村商业银行股份有限公司", 'shotName' => "顺德农村商业银行",],
            ['code' => "100110", 'name' => "重庆农村商业银行股份有限公司", 'shotName' => "重庆农村商业银行",],
            ['code' => "100111", 'name' => "北京农村商业银行股份有限公司", 'shotName' => "北京农村商业银行",],
            ['code' => "100112", 'name' => "深圳农村商业银行股份有限公司", 'shotName' => "深圳农村商业银行",],
            ['code' => "100113", 'name' => "恒丰银行", 'shotName' => "恒丰银行",],
            ['code' => "100114", 'name' => "浙商银行", 'shotName' => "浙商银行",],
            ['code' => "100116", 'name' => "天津农村合作银行", 'shotName' => "天津农村商业银行",],
            ['code' => "100117", 'name' => "渤海银行股份有限公司", 'shotName' => "渤海银行",],
            ['code' => "100118", 'name' => "徽商银行股份有限公司", 'shotName' => "徽商银行",],
            ['code' => "100120", 'name' => "浙江三门银座村镇银行股份有限公司", 'shotName' => "浙江三门银座村镇银行",],
            ['code' => "100121", 'name' => "北京顺义银座村镇银行股份有限公司", 'shotName' => "北京顺义银座村镇银行",],
            ['code' => "100122", 'name' => "江西赣州银座村镇银行股份有限公司", 'shotName' => "江西赣州银座村镇银行",],
            ['code' => "100123", 'name' => "深圳福田银座村镇银行股份有限公司", 'shotName' => "深圳福田银座村镇银行",],
            ['code' => "100124", 'name' => "重庆渝北银座村镇银行股份有限公司", 'shotName' => "重庆渝北银座村镇银行",],
            ['code' => "100125", 'name' => "重庆黔江银座村镇银行股份有限公司", 'shotName' => "重庆黔江银座村镇银行",],
            ['code' => "100126", 'name' => "浙江景宁银座村镇银行股份有限公司", 'shotName' => "浙江景宁银座村镇银行",],
            ['code' => "100127", 'name' => "上海农村商业银行", 'shotName' => "上海农商银行",],
            ['code' => "100129", 'name' => "吉林省农村信用社联合社（不办理转汇业务）", 'shotName' => "吉林省农村信用社",],
            ['code' => "100130", 'name' => "江苏省农村信用社联合社(不对外)", 'shotName' => "江苏省农村信用社",],
            ['code' => "100131", 'name' => "宁波鄞州农村合作银行", 'shotName' => "宁波鄞州农村合作银行",],
            ['code' => "100132", 'name' => "安徽省农村信用联社资金清算中心", 'shotName' => "安徽省农村信用社",],
            ['code' => "100133", 'name' => "福建省农村信用社联合社", 'shotName' => "福建省农村信用社",],
            ['code' => "100134", 'name' => "山东省农村信用社联合社(不对外办理业务)", 'shotName' => "山东省农村信用社",],
            ['code' => "100135", 'name' => "湖北省农村信用社联合社结算中心", 'shotName' => "湖北省农村信用社",],
            ['code' => "100136", 'name' => "东莞农村商业银行股份有限公司", 'shotName' => "东莞农村商业银行",],
            ['code' => "100137", 'name' => "广西壮族自治区农村信用社联合社", 'shotName' => "广西壮族自治区农村信用社",],
            ['code' => "100138", 'name' => "海南省农村信用社联合社资金清算中心", 'shotName' => "海南省农村信用社",],
            ['code' => "100139", 'name' => "云南省农村信用社联合社", 'shotName' => "云南省农村信用社",],
            ['code' => "100140", 'name' => "宁夏黄河农村商业银行股份有限公司", 'shotName' => "宁夏黄河农村商业银行",],
            ['code' => "100141", 'name' => "浙江省农村信用社联合社", 'shotName' => "浙江省农村信用社",],
            ['code' => "100142", 'name' => "中国邮政储蓄银行有限责任公司", 'shotName' => "中国邮政储蓄银行",],
            ['code' => "100144", 'name' => "国家开发银行", 'shotName' => "国家开发银行",],
            ['code' => "100145", 'name' => "中国进出口银行", 'shotName' => "中国进出口银行",],
            ['code' => "100146", 'name' => "中国农业发展银行", 'shotName' => "中国农业发展银行",],
            ['code' => "100147", 'name' => "外资银行（合集）", 'shotName' => "外资银行（合集）",],
            ['code' => "100148", 'name' => "奥地利中央合作银行", 'shotName' => "奥地利中央合作银行",],
            ['code' => "100149", 'name' => "澳新银行", 'shotName' => "澳新银行",],
            ['code' => "100150", 'name' => "比利时联合银行", 'shotName' => "比利时联合银行",],
            ['code' => "100151", 'name' => "创兴银行有限公司", 'shotName' => "创兴银行",],
            ['code' => "100152", 'name' => "大华银行", 'shotName' => "大华银行",],
            ['code' => "100153", 'name' => "大新银行", 'shotName' => "大新银行",],
            ['code' => "100154", 'name' => "大众银行（香港）有限公司", 'shotName' => "大众银行",],
            ['code' => "100155", 'name' => "德富泰银行有限公司", 'shotName' => "德富泰银行",],
            ['code' => "100156", 'name' => "德国北德意志州银行", 'shotName' => "德国北德意志州银行",],
            ['code' => "100157", 'name' => "德国商业银行", 'shotName' => "德国商业银行",],
            ['code' => "100158", 'name' => "德意志银行", 'shotName' => "德意志银行",],
            ['code' => "100159", 'name' => "东亚银行（中国）有限公司", 'shotName' => "东亚银行",],
            ['code' => "100160", 'name' => "法国里昂信贷银行", 'shotName' => "法国里昂信贷银行",],
            ['code' => "100161", 'name' => "法国外贸银行", 'shotName' => "法国外贸银行",],
            ['code' => "100162", 'name' => "法国兴业银行", 'shotName' => "法国兴业银行",],
            ['code' => "100163", 'name' => "富邦华一银行", 'shotName' => "富邦华一银行",],
            ['code' => "100164", 'name' => "韩国产业银行", 'shotName' => "韩国产业银行",],
            ['code' => "100165", 'name' => "韩国国民银行", 'shotName' => "韩国国民银行",],
            ['code' => "100166", 'name' => "韩亚银行（中国）有限公司", 'shotName' => "韩亚银行",],
            ['code' => "100167", 'name' => "荷兰合作银行（中国）有限公司", 'shotName' => "荷兰合作银行",],
            ['code' => "100168", 'name' => "荷兰商业银行", 'shotName' => "荷兰商业银行",],
            ['code' => "100169", 'name' => "恒生银行（中国）有限公司", 'shotName' => "恒生银行",],
            ['code' => "100170", 'name' => "花旗银行（中国）有限公司", 'shotName' => "花旗银行",],
            ['code' => "100171", 'name' => "华侨永亨银行", 'shotName' => "华侨永亨银行",],
            ['code' => "100172", 'name' => "华商银行", 'shotName' => "华商银行",],
            ['code' => "100173", 'name' => "汇丰银行（中国）有限公司", 'shotName' => "汇丰银行",],
            ['code' => "100174", 'name' => "集友银行", 'shotName' => "集友银行",],
            ['code' => "100175", 'name' => "加拿大丰业银行有限公司", 'shotName' => "加拿大丰业银行",],
            ['code' => "100176", 'name' => "马来亚银行", 'shotName' => "马来亚银行",],
            ['code' => "100177", 'name' => "美国建东银行有限公司", 'shotName' => "美国建东银行",],
            ['code' => "100178", 'name' => "美国银行", 'shotName' => "美国银行",],
            ['code' => "100179", 'name' => "蒙特利尔银行", 'shotName' => "蒙特利尔银行",],
            ['code' => "100180", 'name' => "摩根大通银行（中国）有限公司", 'shotName' => "摩根大通银行",],
            ['code' => "100181", 'name' => "摩根士丹利国际银行有限公司", 'shotName' => "摩根士丹利国际银行",],
            ['code' => "100182", 'name' => "南洋商业银行（中国）有限公司", 'shotName' => "南洋商业银行",],
            ['code' => "100183", 'name' => "盘古银行", 'shotName' => "盘古银行",],
            ['code' => "100184", 'name' => "企业银行（中国）有限公司", 'shotName' => "企业银行",],
            ['code' => "100185", 'name' => "日本住友信托银行", 'shotName' => "日本住友信托银行",],
            ['code' => "100186", 'name' => "瑞典北欧斯安银行", 'shotName' => "瑞典北欧斯安银行",],
            ['code' => "100187", 'name' => "瑞典商业银行公共有限公司", 'shotName' => "瑞典商业银行",],
            ['code' => "100188", 'name' => "瑞典银行有限公司", 'shotName' => "瑞典银行",],
            ['code' => "100189", 'name' => "瑞士信贷第一波士顿银行", 'shotName' => "瑞士信贷第一波士顿银行",],
            ['code' => "100190", 'name' => "瑞士银行有限公司", 'shotName' => "瑞士银行",],
            ['code' => "100191", 'name' => "瑞穗银行（中国）有限公司", 'shotName' => "瑞穗银行",],
            ['code' => "100192", 'name' => "三井住友银行（中国）有限公司", 'shotName' => "三井住友银行",],
            ['code' => "100193", 'name' => "三菱东京日联银行", 'shotName' => "三菱东京日联银行",],
            ['code' => "100194", 'name' => "山口银行", 'shotName' => "山口银行",],
            ['code' => "100195", 'name' => "上海--巴黎国际银行", 'shotName' => "上海巴黎国际银行",],
            ['code' => "100196", 'name' => "上海商业银行", 'shotName' => "上海商业银行",],
            ['code' => "100197", 'name' => "首都银行（中国）有限公司", 'shotName' => "首都银行",],
            ['code' => "100198", 'name' => "苏格兰皇家银行（中国）有限公司", 'shotName' => "苏格兰皇家银行",],
            ['code' => "100199", 'name' => "泰华农民银行", 'shotName' => "泰华农民银行",],
            ['code' => "100200", 'name' => "外换银行（中国）有限公司", 'shotName' => "外换银行",],
            ['code' => "100201", 'name' => "新韩银行（中国）有限公司", 'shotName' => "新韩银行",],
            ['code' => "100202", 'name' => "星展银行", 'shotName' => "星展银行",],
            ['code' => "100203", 'name' => "意大利联合圣保罗银行", 'shotName' => "意大利联合圣保罗银行",],
            ['code' => "100204", 'name' => "意大利裕信银行股份有限公司", 'shotName' => "意大利裕信银行",],
            ['code' => "100205", 'name' => "英国巴克莱银行有限公司", 'shotName' => "英国巴克莱银行",],
            ['code' => "100206", 'name' => "永亨银行（中国）有限公司", 'shotName' => "永亨银行",],
            ['code' => "100207", 'name' => "永隆银行", 'shotName' => "永隆银行",],
            ['code' => "100208", 'name' => "友利银行（中国）有限公司", 'shotName' => "友利银行",],
            ['code' => "100209", 'name' => "渣打银行", 'shotName' => "渣打银行",],
            ['code' => "100210", 'name' => "中德住房储蓄银行", 'shotName' => "中德住房储蓄银行",],
            ['code' => "100211", 'name' => "中信银行国际（中国）有限公司", 'shotName' => "中信银行国际（中国）有限公司",],
            ['code' => "100212", 'name' => "其他银行", 'shotName' => "其他银行",],
            ['code' => "100213", 'name' => "广东南海农村商业银行股份有限公司", 'shotName' => "广东南海农村商业银行",],
            ['code' => "100214", 'name' => "成都银行", 'shotName' => "成都银行",],
            ['code' => "100215", 'name' => "哈尔滨银行", 'shotName' => "哈尔滨银行",],
        ];
        return $banks;
    }
    
    public function getBankCodeNameMap()
    {
        $map = [];
        foreach ($this->getBanks() as $k => $v) {
            $map[$v['code']] = $v['name'];
        }
        return $map;
    }

    protected function getResult($uri, $params)
    {
        $version = $this->version;
        $fun = __FUNCTION__.$version;
        $this->transId = $params['transId'];
        $this->route = $uri;
        $resp_arr = $this->$fun($uri, $params);
        $this->resp_arr = $resp_arr;
        $this->ret_code = $resp_arr['retCode'] ?? null;
        $this->ret_msg = $resp_arr['retMsg'] ?? null;
        return $this->resp_arr;
    }

    protected function getResult1($uri, $params)
    {
        // 参数升序
        ksort($params);
        //参数如果是数组,转json字符串
        foreach ($params as $k => &$v) {
            if (is_array($v)) {
                $v = Tools::toJson($v);
            }
        }
        $digest = implode('|', $params);
        $file = $this->sdjKey; // 证书
        $key = openssl_pkey_get_private($file);//获取私钥
        openssl_sign($digest, $signature, $key, OPENSSL_ALGO_SHA256);//获取签名
        openssl_free_key($key);//释放私钥
        $sign = base64_encode($signature);//base64加密获得最终签名
        $params['signData'] = $sign;
        $this->preEncryptionData = Tools::toJson($params);
        $headers = [];
        $formattedData = [
            'headers' => $headers,
            'json' => $params,
        ];
        $client = new Client();
        $response = $client->request(
            'POST',
            "{$this->baseUri}/{$uri}",
            $formattedData
        );
        $content = $response->getBody()->getContents() ?? '[]';
        $returnData = Tools::isJson($content);
        $publickey = $this->xiaMengGuoJiYinHangCer; // 证书
        $key = openssl_get_publickey($publickey);
        // 返回参数签名原串排序
        $signData = $returnData['signData'];
        unset($returnData['signData']);
        ksort($returnData);
        $returnDigest = $this->implodeData($returnData);
        $ok = (bool) openssl_verify($returnDigest, base64_decode($signData), $key, "SHA256");
        openssl_free_key($key);
        if (!$ok) {
            throw new \Exception("验签失败");
        }
        return $returnData;
    }

    protected function getResult2($uri, $params)
    {
        // 参数升序
        ksort($params);
        $json = Tools::toJson($params);
        $this->preEncryptionData = $json;
        $this->randKey = uniqid();
        $aes = new OpenSSLAES($this->randKey);
        $encrypted = $aes->encrypt($json);
        $public_key = openssl_pkey_get_public($this->xiaMengGuoJiYinHangCer);
        if(!$public_key){
            throw new \Exception('公钥不可用');
        }
        $return_en = openssl_public_encrypt($this->randKey, $crypted, $public_key);
        if(!$return_en){
            return('加密失败,请检查RSA秘钥');
        }
        $eb64_cry = base64_encode($crypted);
        $this->serialNo = uniqid();
        // 技术报文
        $arr1 = [
            "encryptedData"=>$encrypted,
            "encryptedKey"=>$eb64_cry,
            "serialNo" => uniqid(),
            "timestamp"=>date("YmdHis"),
            "version"=>"2.0"
        ];
        ksort($arr1);
        $json1 = Tools::toJson($arr1);
        $this->technologyMessage = $json1;
        $content=stripcslashes($json1);
        $sdjKey = openssl_get_privatekey($this->sdjKey);
        openssl_sign($content, $signature, $sdjKey, "SHA256");
        openssl_free_key($sdjKey);
        $sign = base64_encode($signature);
        $signature=stripcslashes($sign);
        $arr1['signature'] = $signature;
        $json1 = Tools::toJson($arr1);
        $client = new Client();
        $response = $client->request(
            'POST',
            "{$this->baseUri}/{$uri}",
            ['body' => $json1,]
        );
        $content = $response->getBody()->getContents() ?? '[]';
        $returnData = Tools::isJson($content);
        $signature = $returnData['signature'];
        $signature=stripcslashes($signature);
        $a = $returnData;
        unset($a['signature']);
        ksort($a);
        $content=stripcslashes(Tools::toJson($a));
        $key = openssl_get_publickey($this->xiaMengGuoJiYinHangCer);
        $ok = openssl_verify($content,base64_decode($signature), $key, 'SHA256');
        openssl_free_key($key);
        if (!$ok) {
            throw new \Exception("验签失败");
        }
        $private_key = openssl_pkey_get_private($this->sdjKey);
        if(!$private_key){
            throw new \Exception("私钥不可用");
        }
        $encryptedKey = $a['encryptedKey'];
        $return_de = openssl_private_decrypt(base64_decode($encryptedKey), $decrypted, $private_key);
        if(!$return_de){
            throw new \Exception("解密失败,请检查RSA秘钥");
        }
        $retAes = new OpenSSLAES($decrypted);
        $retEncrypted = $a['encryptedData'];
        $decrypted = $retAes->decrypt($retEncrypted);
        return Tools::isJson($decrypted);
    }

    protected function implodeData($arr)
    {
        foreach ($arr as $k => &$v) {
            if (is_array($v)){
                $v = $this->array2string($v);
            }
        }
        $str = implode('|', $arr);
        return $str;
    }

    protected function arraySort($data)
    {
        // 排序
        ksort($data);
        $str = '';
        foreach ($data as $k => $v) {
            if (is_array($v)) {
                $t = $this->array2string($v);
            } else {
                $t = $v;
            }
            $str .= '|' . $t;
        }

        return substr($str, 1);
    }

    /**
     * 二维数组 key=value 数组转原数据字符串
     * @param $array
     * @return string
     */
    protected function array2string($array)
    {
        $string = '[';
        if ($array && is_array($array)) {
            foreach ($array as $key => $value) {
                if ($value && is_array($value)) {
                    if ($key != 0) {
                        $string .= ', {';
                    } else {
                        $string .= '{';
                    }
                    $string_s = [];
                    foreach ($value as $k => $v) {
                        $string_s[] .= ' ' . $k . '=' . $v;
                    }
                    $stringc = implode(',', $string_s);
                    $stringc = substr($stringc, 1);
                    $string .= $stringc;
                    $string .= '}';
                }
            }
        }
        $string .= ']';

        return $string;
    }

    public function test()
    {
        $transId = uniqid();
        $params = [
            'platNo' => $this->platNo,//商户平台在分账通注册的平台编号
            'acctType' => '01',//汇总账户
            'transId' => $transId,//请求业务流水号
        ];
        // 参数升序
        ksort($params);
        //参数如果是数组,转json字符串
        foreach ($params as $k => &$v) {
            if (is_array($v)) {
                $v = Tools::toJson($v);
            }
        }
        $digest = implode('|', $params);
        $file = file_get_contents(\Yii::getAlias('@common/config/filedata/fenzhangtong/sdj-key.pem')); // 证书
        $key = openssl_pkey_get_private($file);//获取私钥
        openssl_sign($digest, $signature, $key, OPENSSL_ALGO_SHA256);//获取签名
        openssl_free_key($key);//释放私钥
        $sign = base64_encode($signature);//base64加密获得最终签名
        $params['signData'] = $sign;
        $headers = [];
        $formattedData = [
            'headers' => $headers,
            'json' => $params,
        ];
        $client = new Client([
            'base_uri' => $this->baseUri,
        ]);
        $response = $client->request(
            'POST',
            'IESI111018',
            $formattedData
        );
        $content = $response->getBody()->getContents() ?? '[]';
        $returnData = Tools::isJson($content);
        $publickey = file_get_contents(\Yii::getAlias('@common/config/filedata/fenzhangtong/GuoJiYinHang.cer')); // 证书
        $key = openssl_get_publickey($publickey);
        // 返回参数签名原串排序
        $signData = $returnData['signData'];
        unset($returnData['signData']);
        ksort($returnData);
        $returnDigest = implode('|', $returnData);
        $ok = (bool) openssl_verify($returnDigest, base64_decode($signData), $key, "SHA256");
        openssl_free_key($key);
        if ($ok) {
            echo('------------验签成功-----------');
        } else {
            echo('------------验签失败-----------');
        }
        var_dump($returnData);
    }
}